<?php
/**
 * User:chendenan
 * Created On 2022/3/11 0011 21:34
 */

namespace app\common\lib\mail;
use PHPMailer\PHPMailer\PHPMailer;
use PHPMailer\PHPMailer\Exception;
use think\facade\Log;

class PhpMail
{
    /**
     * @param $to
     * @param string $subject
     * @param string $content
     * @param string $addAttachment
     * @return array
     * @throws Exception
     * @author: LuckyHhy <jackhhy520@qq.com>
     * @describe:发送邮件
     */
    public static function sendEmail($to,$subject='',$content='',$addAttachment=''){
        //判断openssl是否开启
        $openssl_funcs = get_extension_funcs('openssl');
        if(!$openssl_funcs){
            return ['code'=>0 , 'msg'=>'请先开启openssl扩展'];
        }
        $mail = new PHPMailer;
        $mail->CharSet  = 'UTF-8'; //设定邮件编码，默认ISO-8859-1，如果发中文此项必须设置，否则乱码
        $mail->isSMTP(); //使用SMTP服务
        $mail->SMTPDebug = 0;
        //Whether to use SMTP authentication
        $mail->SMTPAuth = true; //是否使用身份验证
        //调试输出格式
        $mail->Debugoutput = 'html';
        //smtp服务器
        $mail->Host = config('phpmail.mail_smtp_host'); // 发送方的SMTP服务器地址
        //端口 - likely to be 25, 465 or 587
        $mail->Port = config('phpmail.mail_smtp_port'); // 163邮箱的ssl协议方式端口号是465/994
        $mail->SMTPSecure =config('phpmail.mail_secure');// 使用安全协议 tls,ssl
        //用户名
        $mail->Username = config('phpmail.mail_smtp_user'); // 发送方的邮箱用户名，就是你申请的SMTP服务使用的163邮箱
        //密码
        $mail->Password = config('phpmail.mail_smtp_pass');// 发送方的邮箱密码，注意用163邮箱这里填写的是“客户端授权密码”而不是邮箱的登录密码！
        //Set who the message is to be sent from
        $mail->setFrom(config('phpmail.mail_smtp_user'),config('phpmail.mail_smtp_name'));// 设置发件人信息，如邮件格式说明中的发件人 发件人邮箱，发件人名字
        //回复地址
        if(filter_var(config('phpmail.mail_reply_user'), FILTER_VALIDATE_EMAIL)!=false && !empty(config('phpmail.mail_reply_name'))){
            $mail->addReplyTo(config('phpmail.mail_reply_user'), config('phpmail.mail_reply_name')); // 设置回复人信息，指的是收件人收到邮件后，如果要回复，回复邮件将发送到的邮箱地址
        }
        //接收邮件方
        if(is_array($to)){
            foreach ($to as $v){
                $mail->addAddress($v); // 设置收件人信息，如邮件格式说明中的收件人邮箱
            }
        }else{
            $mail->addAddress($to);    // 设置收件人信息，如邮件格式说明中的收件人邮箱
        }
        $mail->isHTML(true);// send as HTML
        //标题
        $mail->Subject = $subject;
        //邮箱正文
        $mail->Body = $content;
        //$mail->AltBody = "This is the plain text纯文本";// 这个是设置纯文本方式显示的正文内容，如果不支持Html方式，就会用到这个，基本无用
        //添加附件
        if (!empty($addAttachment)){
            $mail->addAttachment($addAttachment);
        }
//        if(!$mail->send()){// 发送邮件
//            echo "Message could not be sent.";
//            echo "Mailer Error: ".$mail->ErrorInfo;// 输出错误信息
//        }else{
//            echo '发送成功';
//        }
        try {
            $mail->send();
            Log::info("phpmail-send-{$to}-result".json_encode(['subject'=>$subject,'body'=>$content,'addAttachment'=>$addAttachment]));
            return true;
            //return show("邮件发送成功",config("status.success"));
            //return ['code'=>1 , 'msg'=>'发送成功'];
        }catch (Exception $e){
            Log::info("phpmail-send-{$to}-Exception".$e->getMessage());
            return false;
            //return show($e->getMessage(),config("status.error"));
            //return ['code'=>0 , 'msg'=>$e->getMessage()];
        }
    }

}